/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.seguradora.model;

import br.com.seguradora.model.constant.EspecieVeiculo;
import br.com.seguradora.model.constant.TipoCombustivel;
import br.com.seguradora.model.constant.TipoVeiculo;
import br.com.seguradora.util.IntegerFormatter;
import br.com.seguradora.util.MoneyFormatter;
import com.towel.el.annotation.Resolvable;

/**
 *
 * @author Diego
 */
public class Veiculo {

    @Resolvable(colName = "Código")
    private long id;
    private boolean shadow;
    @Resolvable(colName = "Bloqueado")
    private boolean bloqueado;
    // <editor-fold defaultstate="collapsed" desc="Instance Variables">
    @Resolvable(colName = "Tipo")
    private TipoVeiculo tipo;
    @Resolvable(colName = "Renavam")
    private String renavam;
    private String exercicio;
    private String nomeProprietario;
    private String cpfProprietario;
    @Resolvable(colName = "Placa")
    private String placa;
    private String chassi;
    private EspecieVeiculo especie;
    private TipoCombustivel combustivel;
    @Resolvable(colName = "Modelo")
    private Modelo modelo;
    private String anoFabricacao;
    private String anoModelo;
    private String especificacao;
    private String categoria;
    private String corPredominante;
    private String observacao;
    @Resolvable(colName = "Associado")
    private Associado associado;
    private Grupo grupo;
    @Resolvable(colName = "Valor", formatter = MoneyFormatter.class)
    private double valor;
    @Resolvable(colName = "Cotas", formatter = IntegerFormatter.class)
    private double cotas;
    @Resolvable(colName = "Mensalidade", formatter = MoneyFormatter.class)
    private double mensalidade;
    private double franquia;    
    private double valorPorCota;
    @Resolvable(colName = "Rateio", formatter = MoneyFormatter.class)
    private double rateio;
    //</editor-fold>

    public Veiculo() {
    }

    public Veiculo(long id) {
        this.id = id;
    }

    public String getAnoFabricacao() {
        return anoFabricacao;
    }

    public void setAnoFabricacao(String anoFabricacao) {
        this.anoFabricacao = anoFabricacao;
    }

    public String getAnoModelo() {
        return anoModelo;
    }

    public void setAnoModelo(String anoModelo) {
        this.anoModelo = anoModelo;
    }

    public Associado getAssociado() {
        return associado;
    }

    public void setAssociado(Associado associado) {
        this.associado = associado;
    }

    public boolean isBloqueado() {
        return bloqueado;
    }

    public void setBloqueado(boolean bloqueado) {
        this.bloqueado = bloqueado;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getChassi() {
        return chassi;
    }

    public void setChassi(String chassi) {
        this.chassi = chassi;
    }

    public TipoCombustivel getCombustivel() {
        return combustivel;
    }

    public void setCombustivel(TipoCombustivel combustivel) {
        this.combustivel = combustivel;
    }

    public String getCorPredominante() {
        return corPredominante;
    }

    public void setCorPredominante(String corPredominante) {
        this.corPredominante = corPredominante;
    }

    public double getCotas() {
        return cotas;
    }

    public void setCotas(double cotas) {
        this.cotas = cotas;
    }

    public String getCpfProprietario() {
        return cpfProprietario;
    }

    public void setCpfProprietario(String cpfProprietario) {
        this.cpfProprietario = cpfProprietario;
    }

    public EspecieVeiculo getEspecie() {
        return especie;
    }

    public void setEspecie(EspecieVeiculo especie) {
        this.especie = especie;
    }

    public String getEspecificacao() {
        return especificacao;
    }

    public void setEspecificacao(String especificacao) {
        this.especificacao = especificacao;
    }

    public String getExercicio() {
        return exercicio;
    }

    public void setExercicio(String exercicio) {
        this.exercicio = exercicio;
    }

    public double getFranquia() {
        return franquia;
    }

    public void setFranquia(double franquia) {
        this.franquia = franquia;
    }

    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Modelo getModelo() {
        return modelo;
    }

    public void setModelo(Modelo modelo) {
        this.modelo = modelo;
    }

    public double getMensalidade() {
        return mensalidade;
    }

    public void setMensalidade(double mensalidade) {
        this.mensalidade = mensalidade;
    }

    public String getNomeProprietario() {
        return nomeProprietario;
    }

    public void setNomeProprietario(String nomeProprietario) {
        this.nomeProprietario = nomeProprietario;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public String getRenavam() {
        return renavam;
    }

    public void setRenavam(String renavam) {
        this.renavam = renavam;
    }

    public boolean isShadow() {
        return shadow;
    }

    public void setShadow(boolean shadow) {
        this.shadow = shadow;
    }

    public TipoVeiculo getTipo() {
        return tipo;
    }

    public void setTipo(TipoVeiculo tipo) {
        this.tipo = tipo;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public double getValorVistoria() {
        if (getTipo().equals(TipoVeiculo.AUTOMOVEL)) {
            return 30d;
        } else {
            return 20d;
        }
    }
    
    public void setValorPorCota(double valorPorCota) {
        if(valorPorCota <= 0) {
            rateio = getMensalidade();
        } else {
            rateio = (valorPorCota * getCotas()) + getMensalidade();
        }
    }

    @Override
    public String toString() {
        return modelo.getNome() + " - " + corPredominante;
    }
    
    public static void main(String[] args) {
        double prejuizo = 4000;
        double cotas = 6000;
        double valorCota = prejuizo / cotas;
        System.out.println(valorCota);
        double cota1 = 60;
        double mensalidade1 = 36.90;
        double rateio1 = (valorCota * cota1) + mensalidade1;
        System.out.println(rateio1);
        
        double cota2 = 120;
        double mensalidade2 = 56;
        double rateio2 = (valorCota * cota2) + mensalidade2;
        System.out.println(rateio2);
    }
    
}
